

#include <cstdlib>
#include <cstdio>
#include <iostream>
#include <string.h>
#include "DumperStatusProc.h"


using namespace std;



#define bloc(i) mem[i*N] 
int N=8;
int K=100;

char * mem;

/**
 *Ce code source tente d'illustrer les surcôuts à la
 *gestion des blocs
 */



void allocationUniBloc(){
  printf("Allocation unibloc\n");
  mem = (char*) malloc(K*N);
}

void allocationPolyBloc(){
  printf("Allocation polybloc\n");
  for(int i=0;i<K;i++){
    malloc(N);
  }
}


#define usage() printf("Usage: ./prog [nombre de bloc] [type stockage (0:unibloc) (1:polybloc)]\n")
#define header() printf("Taille des blocs: %d, nombre de blocs:%d\n",N,K)

/**
 * argv[1]:N taille d'un bloc
 * argv[2]:K nombre de blocs
 */
int main(int argc,char ** argv){
  
  DumperStatusProc procSt;
  
  if(argc >= 3){
    K= atoi(argv[1]);
    int choix = atoi(argv[2]);
    
    switch(choix){
    case 0:
      
      goto uniBloc;
      
    case 1:
      
      goto polyBloc;
    defaut:
      usage();
      return 0;
    }
  }
  else
    {
      usage();
      return 0;
    }
  
 uniBloc:
  {
    header();
    allocationUniBloc();
    goto mesure;
  }
  
 polyBloc:
  {
    header();
    allocationPolyBloc();
    goto mesure;
  }
  
 mesure:
  {
    printf("# %d",K*N);
    procSt.printMeasure();
  }
  return 0;
}
